#include<iostream>
using namespace std;
/*
构造函数：
1. 构造函数没有返回值，也不写void
2. 构造函数的函数名和类名相同
3. 构造函数可以有参数，也可以重载
4. 构造函数在创建对象时自动调用
5. 构造函数不能被直接调用，只能通过创建对象来调用 malloc不会调用构造函数
6. 构造函数不能被继承，子类不会继承父类的构造函数
7. 构造函数可以被重载，即可以有多个构造函数
8. 构造函数可以被重写，即子类可以重写父类的构造函数
9. 构造函数可以被删除，即子类可以删除父类的构造函数
作用：
1、初始化对象
2、给对象分配内存
3、给对象赋初值
4、打开文件
*/
class Student
{
public:
    Student()
    {
        cout<<"Student()"<<endl;
    }
    Student(int a)
    {
        cout<<"Student(int a)"<<endl;
    }
    Student(int a,int b)
    {
        cout<<"Student(int a,int b)"<<endl;
    }
    Student(const Student &s)
    {
        cout<<"Student(const Student &s)"<<endl;
    
}
};
int main()
{
    // Student s1;
    // Student s2(10);
    // Student s3(10,20);
    // Student s4(s3);
    // Student *p = new Student;//构造函数在创建对象时自动调用
    // Student *p1 = (Student*)malloc(sizeof(Student));//malloc不会调用构造函数
//匿名对象，构造函数在创建对象时自动调用
    Student();
    Student(10);
    Student(10,20);

    Student a = Student(10); //匿名对象赋值给对象 只构造一次

    // free(p1);
    // delete p;
    return 0;
}